#define N 5
int p[N]; // ciag
int max(); // znajdowanie maksimum
void exch(int, int); // wymiana
void generate(int ); // generowanie

int main()
{
  int i;
  for (i = 1; i <= N; i++) 
    p[i] = i;
  generate(N);
  return 0;
}

int max()
{
  int i, j, k, m;
  int count;
 M1:
  j = N;
  k = N - 1;
  m = p[N];
  count = 0;
 M2:
  if (k == 0) {
    printf("%i ", count);
    return 0;
  }
 M3:
  if (p[k] <= m)
    goto M5;
 M4:
  j = k;
  m = p[k];
  count++;
 M5:
  k = k - 1;
  goto M2;
}

void exch(int i, int j)
{
  int t;
  t = p[i];
  p[i] = p[j];
  p[j] = t;
}

void generate(int n)
{
  int i;
  if (n == 1) 
    max();
  for (i = 1; i <= n; i++) { 
    exch(i, n);
    generate(n-1);
    exch(i, n);
  }
}
